#ifndef BVR_PLATFORM
#define BVR_PLATFORM

/*NOTE:

	Define platform macros, used for precompiler blocks when
	writing platform specific routines */


#ifdef _WIN32
//Windows platform
	#define VIX_SYS_WINDOWS
	#define WIN32_LEAN_AND_MEAN
	#include <windows.h>

#ifndef NOMINMAX
	#define NOMINMAX
#endif

#elif defined(__linux__)
//linux platform
	#define VIX_SYS_LINUX

#elif defined(__APPLE__)
	#define VIX_SYS_MACOS

#else
	#error System is not supported by the Beaver Engine
#endif

#if !defined(BVR_STATIC)
#ifdef BVR_SYS_WINDOWS
#if defined (BVR_NONCLIENT_BUILD)
//define dllexport and dllimport macros
#ifndef BVR_API
	#define BVR_API __declspec(dllexport)
#endif

#else
	#ifndef BVR_API
		#define BVR_API __declspec(dllimport)
#endif
#endif

//Visual c++ compiler warning C4251 disable
#ifdef _MSC_VER
#pragma warning(disable : 4251)
#endif

#else //Linux and MAC OS X
#if __GNUC__ >= 4
//GCC 4 has unique keywords for showing/hiding symbols
//the same keyword is used for both import and export
#define BVR_API __attribute__ ((__visibility__("default")))
#define BVR_API __attribute__ ((__visibility__("default")))
#else
	#define BVR_API
	#define BVR_API
#endif
#endif

#else
//static build doesn't need import/export macros
	#define BVR_API
	#define BVR_API
#endif

/*BYTE define for non Windows platforms*/
#ifndef _WIN32
typedef unsigned char BYTE
#endif

#endif